home *** CD-ROM | disk | FTP | other *** search
- +cbmstart =$c000
- +readpuf =$0400
- +dirpuf =$0500
- {CBM-A}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-S}
- {$7d}cbmstart:startadresse im 64er {$7d}
- {$7d} {$7d}
- {$7d}readpuf :speicher fuer empfangenen {$7d}
- {$7d} sektor {$7d}
- {$7d}dirpuf :speicher fuer directory {$7d}
- {CBM-Z}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-X}
- .goto weiter
- _gby
- bvc * ;ein byte vom
- clv ;rw-kopf holen
- lda $1c01
- .endmacro
- _tra
- bit $1800 ;auf atn warten
- bpl *-3 ;$8f ist ein
- .b $8f,$00,$18;illegaler, der
- ;(akku and x)
- ;ablegt
- bit $1800 ;auf atn clear
- bmi *-3 ;warten
- .endmacro
- _weiter
- {CBM-A}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-S}
- {$7d}computer-teil {$7d}
- {CBM-Z}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-X}
- .setpc cbmstart
-
- +listen =$ffb1
- +seclst =$ff93
- +iecout =$ffa8
- +unlist =$ffae
- +flopstart=$0500
-
- .begin
- jmp install
- jmp load
- jmp motoroff
- jmp reset
- jmp settrs
- jmp read
- jmp trackpos
- jmp test
- jmp cachedir
- jmp finddir
-
- -error sec
- rts
- ;alle 64 byte findet sich was von der
- ;rdtab. etwas unuebersichtlich..
- +rdtab .b 255,255,255,255
-
- ;{$60}{$60}{$60}{$60} sendet xreg zur floppy {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- ;{$60}{$60}{$60}{$60} erg: c=0,z=0,a=0,y=8,x=unv.
- +send
- bit $dd00
- bmi send ; oder bmi error
- bvs send ; bvs error
-
- ldy#8
- sty $dd00
- lda sendtab,x
- and#240
- sta $dd00
- lsr
- lsr
- nop
- nop
- and#240
- nop
- sty $dd00
- nop
- nop
- sta $dd00
- lda sendtab,x
- asl
- asl
- nop
- sty $dd00
- nop
- nop
- sta $dd00
- clc
- nop
- lda#0
- nop
- nop
- sta $dd00
- rts
-
- .fill (rdtab+64-*,0)
- -rdtab2 .b 191,191,191,191
-
- ;{$60}{$60}{$60}{$60} hilft beim testen des interleaves
- ; fuer bereich xreg und ilv yreg
- +test lda trtab,x
- sta ts2+1
- lda mxtab,x
- sta mx
- sty ilv+1
- lda#0
- sta sect
- -ts2 ldx#123
- ldy sect
- jsr settrs
- -ilv lda#4 ;interleave
- adc sect
- -ts3 cmp mx ;anzahl sektoren
- bcc ts4
- sbc mx
- -ts4 sta sect
- jsr read
- inc 53280
- inc 2023
- bne ts2
- rts
- -trtab .b 31,25,18,17
- .fill (rdtab+128-*,0)
- -rdtab3 .b 127,127,127,127
- -mxtab .b 17,18,19,21
- -sect .b 0
- -mx .b 0
-
- {$60}{$60}{$60}{$60}{$60} lader ausschalten {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- +reset ldx#0
- jmp send
- +getbyte
- inx
- lda readpuf,x
- cpx blockmax
- beq gb2
- rts
- -gb2 lda fertig
- beq gb2-1
- sty indexmerk
- jsr read
- ldy readpuf+1
- ldx readpuf
- bne mehrblock
- iny
- sty blockmax
- stx fertig
- ldy indexmerk
- inx
- bne getbyte
-
- .fill (rdtab+192-*,0)
- -rdtab4 .b 63,63,63,63
-
- -mehrblock
- jsr settrs
- ldy indexmerk
- ldx#1
- bne getbyte
-
- -fertig .b 0
- -blockmax .b 0
- -indexmerk .b 0
- {$60}{$60}{$60}{$60}{$60} laedt eine datei ab track (xreg)
- und sektor (yreg)
- +load
- jsr settrs
- ldx#1
- stx fertig
- dex
- stx blockmax
- dex
- jsr getbyte
- sta 45
- jsr getbyte
- sta 46
- ldy#0
- -load1 jsr getbyte
- beq load2
- sta (45),y
- iny
- bne load1
- inc 46
- bne load1
- -load2
- iny
- bne ld3
- inc 46
- -ld3 sty 45
- rts
- {$60}{$60}{$60}{$60}{$60} motor ausschalten {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- +motoroff ldx#62
- jmp send
-
- {$60}{$60}{$60}{$60}{$60} motor einschalten, positionieren
- xreg=tracknummer
- +trackpos stx lade2+1
- lda#63
- jmp lade3
- ;{$60}{$60}{$60}{$60} uebermittelt track (xreg) und
- ; sektor (yreg)
- +settrs sty lade2+1
- -lade3 jsr send
- -lade2 ldx#0
- jsr send
- rts
-
- +sendtab
- .b %00000000,%00001000
- .b %10000000,%10001000
- .b %00000100,%00001100
- .b %10000100,%10001100
- .b %00100000,%00101000
- .b %10100000,%10101000
- .b %00100100,%00101100
- .b %10100100,%10101100
-
- .b %01000000,%01001000
- .b %11000000,%11001000
- .b %01000100,%01001100
- .b %11000100,%11001100
- .b %01100000,%01101000
- .b %11100000,%11101000
- .b %01100100,%01101100
- .b %11100100,%11101100
-
- .b %00010000,%00011000
- .b %10010000,%10011000
- .b %00010100,%00011100
- .b %10010100,%10011100
- .b %00110000,%00111000
- .b %10110000,%10111000
- .b %00110100,%00111100
- .b %10110100,%10111100
-
- .b %01010000,%01011000
- .b %11010000,%11011000
- .b %01010100,%01011100
- .b %11010100,%11011100
- .b %01110000,%01111000
- .b %11110000,%11111000
- .b %01110100,%01111100
- .b %11110100,%11111100
-
- -rerror sec
- rts
- {$60}{$60}{$60}{$60}{$60} liest einen block in den puffer
- readpuf1
- {$60}{$60}{$60}{$60}{$60} erg: c=0,z=0,x=0,a=0,y=8
- +read bit $dd00
- bmi read ; oder bmi rerror
- bvc read ; oder bvc rerror
-
- ldx#0 ;wert fuer atn=0
- ldy#128
- sty incr+1
-
- ldy#8 ;wert fuer atn=1
- sty $dd00
- stx incr+1
- -re1 stx $dd00
- nop
- lda $dd00 ;eor $dd00 aus.
-
- sty $dd00
- inc incr+1
- stx $dd00
- lsr
- lsr
- eor $dd00
-
- sty $dd00
- lsr
- lsr
- stx $dd00
- nop
- eor $dd00
-
- sty $dd00
- lsr
- lsr
- stx $dd00
- nop
- ldx $dd00
- eor rdtab,x ;die 2 unteren
- ;bits von $dd00
- sty $dd00 ;enthalten muell
- +incr sta readpuf ;aus $dd02, der
- ldx#0 ;unbekannt ist,
- lda incr+1 ;daher scheidet
- bne re1 ;ein simples
- ;eor $dd00 aus
- nop
- nop
- stx $dd00
- clc
- rts
-
- {$60}{$60}{$60}{$60}{$60} installiert das system
- +install lda#>puffer
- ldx#>flopstart
- stx hi+1
- sta tr1+2
- ldy#0
- +system sei
- lda#8
- jsr listen
- lda#$6f
- jsr seclst
- lda#"m"
- jsr iecout
- lda#"-"
- jsr iecout
- lda#"w"
- jsr iecout
- tya
- jsr iecout
- -hi lda#0
- jsr iecout
- lda#16
- tax
- jsr iecout
- -tr1 lda puffer,y
- jsr iecout
- iny
- dex
- bne tr1
- lda#8
- jsr unlist
- cpy#0
- bne system
- inc tr1+2
- inc hi+1
- lda hi+1
- cmp#>(flopstart)+3
- bcc system
- lda#8
- jsr listen
- lda#$6f
- jsr seclst
-
- lda#"u" ;start bei
- jsr iecout ;$0500
- lda#"3"
- jsr iecout
- jsr unlist
- cli
- ldy#0
- nop
- dey
- bne *-2
-
- lda $dd00 ;init $dd02
- and#3
- eor#63
- sta $dd02
- lda#0
- sta $dd00
- rts
-
- {$60}{$60}{$60}{$60}{$60} liest 2 zeichen der ersten 64
- files und die tr/sec-adresse
- erg: c=0 : ok
- c=1 >= 64 files gelesen
- +cachedir
- ldx#18
- ldy#0
- tya
- -cda sta dirpuf,y
- iny
- bne cda
- ldy#63
- sty indexmerk
- ldy#1
- -cd0
- jsr settrs
- jsr read
- ldy#0
- ldx indexmerk
- -cd1
- lda readpuf+2,y
- bpl cd2
- lda readpuf+3,y
- sta dirpuf,x
- lda readpuf+4,y
- sta dirpuf+64,x
- lda readpuf+5,y
- sta dirpuf+128,x
- lda readpuf+6,y
- sta dirpuf+192,x
- dex
- bmi cd3
- -cd2 tya
- clc
- adc#$20
- tay
- bcc cd1
-
- stx indexmerk
- ldy readpuf+1
- ldx readpuf
- bne cd0
- clc
- rts
- -cd3 sec
- rts
- {$60}{$60}{$60}{$60}{$60} rechnet den 2-zeichen-filenamen
- in tr/sec um
- erg: c=0 : ok
- c=1 : nicht gefunden
- x/y : tr/sec
- +finddir
- sty indexmerk
- ldy#63
- -fn1
- lda indexmerk
- cmp dirpuf+192,y
- bne fn2
- txa
- cmp dirpuf+128,y
- bne fn2
- lda dirpuf,y
- tax
- lda dirpuf+64,y
- tay
- clc
- rts
- -fn2 dey
- bpl fn1
- sec
- rts
-
- .end
- .fill (256-<*,0)
- +puffer =*
-
- {CBM-A}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-S}
- {$7d}floppy-teil {$7d}
- {$7d}unbenutzte speicherbereiche: {$7d}
- {$7d}$0340-$04ff {$7d}
- {$7d}$20-$3f {$7d}
- {CBM-Z}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{CBM-X}
- .setpc flopstart
- .buffer (puffer,puffer+$2ff)
- .begin
- {$60}{$60}{$60}{$60}{$60} tabellen {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- +t1 =$040
- +t2 =$080
- +t4 =$0c0
- +t3 =$200
- +t5 =$240
- +t6 =$280
- +t7 =$2c0
- +t8 =$300
- +tabloorg =$f8c0
- +tabhiorg =$f8a0
- {$60}{$60}{$60}{$60}{$60} variablen {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- +wunschtrack =$00
- +wunschsektor =$01
- +lastbyte =$02
- +motorflag =$03
- +fmem =$04
- {$60}{$60}{$60}{$60}{$60} konstanten {$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- +sendvalue =$02
- +receivevalue =$0a
- +busyvalue =$08
- +freevalue =$00
- sei ;decodetabelle
- ldx#23 ;kopieren, z.b.
- -asa1 lda tabhi,x ;enthaelt zp23
- sta 8,x ;den decodewert
- dex ;fuer 5bit-
- bpl asa1 ;nibble 23.
- -main2 lda#0
- sta motorflag
- +main
- ldx#255
- txs
- jsr input
- beq ende ;b=0:ende
- cmp#42
- bcc tracksec
- ;b<42:tr/sec
- cmp#63 ;b=63:settrs
- bcc maus ;rest:motoraus
- jsr input
- sta wunschtrack
- jsr readheader
- jmp main
- -maus
- lda#255-4
- and $1c00
- sta $1c00
- bcc main2
- +ende jmp ($fffc)
- -tracksec
- sta wunschtrack
- jsr input
- sta wunschsektor
-
- -trse1 jsr readheader
- cmp wunschsektor
- bne trse1
- -ws4
- lda $1c00 ;sync abwarten,
- bmi ws4 ;jetzt liegt der
- lda $1c01 ;datenblock an
- clv
- ldx#63 ;datenblock:
- -l1 ;64*5 bytes
- *gby
- sta t8,x ;320 bytes
- and#7 ;lesen und
- sta t1,x ;decodierung
- ;vorbereiten
- *gby
- asl
- rol t1,x
- asl
- rol t1,x
- lsr
- lsr
- lsr
- sta t7,x
-
- *gby
- sta t2,x
- ror
- lsr
- lsr
- lsr
- sta t3,x
-
- *gby
- asl
- rol t2,x
- lsr
- sta t4,x
-
- *gby
- sta t6,x
- and#31
- sta t5,x
-
- dex
- bpl l1
-
- bvc * ;in den 320
- clv ;bytes steckt
- lda $1c01 ;das datenblock-
- tay ;kennzeichen,
- lsr ;hier das letzte
- lsr ;byte der daten
- lsr
- sta dc5+1
- bvc *
- clv
- lda $1c01
- sta lastbyte
-
- tya
- asl lastbyte
- rol
- asl lastbyte
- rol
- and#31
- tay
- lda tablo-8,y
- -dc5 ora 123
- sta lastbyte
- -decode ;320 byte werden
- inx ;decodiert und
- ;auf den stapel
- ldy t5,x ;gelegt.
- lda t6,x
- lsr t4,x
- ror
- lsr t4,x
- ror
- lsr
- lsr
- lsr
- sta dc0+1
- lda tablo-8,y
- -dc0 ora 123
- pha
-
- ldy t4,x
- lda t2,x
- and#31
- sta dc1+1
- lda tablo-8,y
- -dc1 ora 123
- pha
-
- lda t7,x
- sta dc2+1
- ldy t3,x
- lda tablo-8,y
- -dc2 ora 123
- pha
-
- ldy t1,x
- lda t8,x
- lsr
- lsr
- lsr
- sta dc3+1
- lda tablo-8,y
- -dc3 ora 123
- pha
-
- cpx#63
- bcc decode
- pla ;datenblockkz
- lda lastbyte ;durch letztes
- pha ;datenbyte ers.
- -transfer
- ldx#1
- txs
- ldy#0 ;2*128 bytes
- ldx#15 ;and-maske
- lda#sendvalue
- sta $1800
- -tr1
- pla
- asl
- *tra
- ror
- *tra
- lsr
- lsr
- lsr
- *tra
- lsr
- *tra
-
- dey
- bne tr1
- bit $1800
- bpl *-3
- bit $1800
- bmi *-3
- jmp main
-
-
- +readheader
- jsr motorein
- lda $1c0c ;init lesen
- ora#$0e
- sta $1c0c
- -waitheader
- lda $1c00 ;sync abwarten
- bmi waitheader
- lda $1c01
- clv
- *gby
- cmp#82 ;teil des
- bne waitheader ;headerkennz.
- ldx#4
- -ws2
- sta fmem ;3.byte=>fmem
- *gby ;4.byte=>akku
- dex
- bne ws2
- tay
- lsr fmem
- ror
- lsr fmem
- ror
- lsr
- lsr
- lsr
- tax
- tya
- and#31
- tay
- lda tabloorg,y
- ora tabhiorg,x ;decodieren
-
- cmp wunschtrack
- beq seccmp
- jsr kopf
- jmp readheader+3
- -seccmp
- lda fmem ;track war
- and#31 ;richtig,
- tax ;sektornummer
- eor fmem ;in den akku
- lsr
- ora tabloorg,x
- rts
-
- +input
- lda#8 ;led ein
- ora $1c00
- sta $1c00
- lda#receivevalue
- sta $1800
- ldy $1800:bpl *-3
- lda#freevalue ;init
- sta $1800
- ldy $1800:bmi *-3
- lda $1800
- and#5
- asl
- ldy $1800:bpl *-3
- ldy $1800:bmi *-3
- ora $1800
- and#15
- tax
- ldy $1800:bpl *-3
- ldy $1800:bmi *-3
- lda $1800
- and#5
- ora inputtab,x
- tax
- lda#busyvalue
- sta $1800
- lda $1c00 ;led aus
- and#255-8
- sta $1c00
- txa
- rts
- +inputtab
- .b %00000000,%00000010
- .b %00001000,%00001010
- .b %00010000,%00010010
- .b %00011000,%00011010
- .b %00100000,%00100010
- .b %00101000,%00101010
- .b %00110000,%00110010
- .b %00111000,%00111010
- +kopf
- ldx#202 ;dex
- sec
- sbc wunschtrack
- bcs ok ;differenz
- ldx#232 ;von aktuellem
- eor#255 ;und zieltrack
- adc#1
- -ok stx wert
- asl ;bewewgung in
- tay ;halftracks
- ldx $1c00 ;steppermotor
- -wert inx ;in den unteren
- txa ;beiden bits
- ora#12
- sta $1c00
- ldx#128+18 ;18 ist der
- stx $1805 ;schlechteste
- ldx $1805 ;mir bekannte
- bmi *-3 ;wert fuer den
- dey ;steppermotor
- bne wert-3
-
- and#%10011111 ;speed in bits
- ldx#0 ;5 und 6
- .b $ac ;ldy abs
- -speed adc#31
- ldy $fed8,x ;trackliste
- dey
- cpy wunschtrack
- inx
- bcs speed
- sta $1c00
- rts
- +motorein
- lda motorflag
- bne motorein-1
- lda $1c00
- ora#4
- sta $1c00
- sta motorflag
- ldx#120 ;anlaufzeit
- -me1 dey ;abwarten. ist
- bne me1 ;mir zwar un-
- dex ;klar, warum,
- bne me1 ;aber ohne
- rts ;geht's nicht
-
- ;in diesen beiden tabellen sind die
- ;bits durcheinandergewuerfelt, nach
- ;der uebertragung passen die dann
- ;wieder.
-
- +tablo
- .b $ff,%00000010,%00000000,%00000100
- .b $ff,%00001010,%00001000,%00001100
- .b $ff,$ff ,%00000001,%00000101
- .b $ff,%00001111,%00001001,%00001101
- .b $ff,%00000110,%00000011,%00000111
- .b $ff,%00001110,%00001011,$ff
- +tabhi
- .b $ff,%00100000,%00000000,%01000000
- .b $ff,%10100000,%10000000,%11000000
- .b $ff,$ff ,%00010000,%01010000
- .b $ff,%11110000,%10010000,%11010000
- .b $ff,%01100000,%00110000,%01110000
- .b $ff,%11100000,%10110000,$ff
- .end
-